<?php

namespace App\Models;

use Encore\Admin\Traits\AdminBuilder;
use Encore\Admin\Traits\ModelTree;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Support\Facades\DB;

/**
 * Class Major.
 *
 * @property int $id
 *
 * @method where($parent_id, $id)
 */
class Major extends Model
{
    use AdminBuilder, ModelTree {
        ModelTree::boot as treeBoot;
    }

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['parent_id', 'order', 'code', 'title', 'formed'];

    /**
     * Create a new Eloquent model instance.
     *
     * @param array $attributes
     */
    public function __construct(array $attributes = [])
    {
        $connection = config('admin.database.connection') ?: config('database.default');

        $this->setConnection($connection);

        $this->setTable('major');

        parent::__construct($attributes);
    }

//    /**
//     * A Menu belongs to many roles.
//     *
//     * @return BelongsToMany
//     */
//    public function roles() : BelongsToMany
//    {
//        $pivotTable = config('admin.database.role_menu_table');
//
//        $relatedModel = config('admin.database.roles_model');
//
//        return $this->belongsToMany($relatedModel, $pivotTable, 'menu_id', 'role_id');
//    }

//    /**
//     * @return array
//     */
//    public function allNodes() : array
//    {
//        $connection = config('admin.database.connection') ?: config('database.default');
//        $orderColumn = DB::connection($connection)->getQueryGrammar()->wrap($this->orderColumn);
//
//        $byOrder = $orderColumn.' = 0,'.$orderColumn;
//
//        return static::with('roles')->orderByRaw($byOrder)->get()->toArray();
//    }

//    /**
//     * determine if enable menu bind permission.
//     *
//     * @return bool
//     */
//    public function withPermission()
//    {
//        return (bool) config('admin.menu_bind_permission');
//    }

//    /**
//     * Detach models from the relationship.
//     *
//     * @return void
//     */
//    protected static function boot()
//    {
//        static::treeBoot();
//
//        static::deleting(function ($model) {
//            $model->roles()->detach();
//        });
//    }
}